<?php
require_once(FWK_EXCEPTION."CustonException.class.php");
require_once(BIB_ACTIVE_RECORD);
require_once(FWK_MODEL."AbsModelDao.class.php");
require_once(FWK_UTIL."FormataDatas.class.php");
/**
 * @author André Coura <andreccls@gmail.com>
 * @since 1.0 - 04/06/2012
 */
class Produtos extends AbsModelDao{

	public $_table = "prod_item";

	public $_id = "id_produto";
	
	private $numElemPagCat = 12;
	
	private $numElemPagMarca = 9;

	/**
	 *
	 * Enter description here ...
	 * @param int $limitIni
	 * @param int $numRegs
	 * @param boolean $count
	 */
	public function getListaGrid($limitIni=0, $numRegs=15, $count=false, $campoFiltro="", $valorFiltro=""){
		$strQuery = "SELECT ";
		if($count){
			$strQuery.= " count(id_produto) ";
		}else{
			$strQuery .= " prod.id_produto, prod.titulo_prod as 'Produto', ";
			$strQuery .= " mar.titulo_marca as 'Marca', ";
			$strQuery .= " cat.desc_categoria as 'Categoria', sub.desc_subcat as 'Subcategoria'";
		}
		$strQuery .= " FROM
					 		".$this->_table." prod
					 		LEFT JOIN prod_cat cat
					 		ON prod.id_categoria = cat.id_cat
					 		LEFT JOIN prod_subcat sub
					 		ON prod.id_subcat = sub.id_subcat
					 		LEFT JOIN prod_marca mar
					 		ON prod.id_marca = mar.id_marca
					 		";
		
		$strQuery .= " WHERE 1 = 1 ";
		
		if($campoFiltro != "" && $valorFiltro != ""){
			switch ($campoFiltro){
				case "Produto":
					$strQuery .= " AND LOWER(prod.titulo_prod) LIKE '%".strtolower($valorFiltro)."%' ";
					break;
				case "Marca":
					$strQuery .= " AND LOWER(mar.titulo_marca) LIKE '%".strtolower($valorFiltro)."%' ";
					break;
				case "Categoria":
					$strQuery .= " AND LOWER(cat.desc_categoria) LIKE '%".strtolower($valorFiltro)."%' ";
					break;
				case "Sub-categoria":
					$strQuery .= " AND LOWER(sub.desc_subcat) LIKE '%".strtolower($valorFiltro)."%' ";
					break;

			}
		}
		
		
		if(!$count){
			$strQuery .= " LIMIT
								".$limitIni." ,".$numRegs;
		}
		$arrRet = ControlDB::getAll($strQuery,3);

		return $arrRet;
	}
	
	
	public function getProdutoById($id){
		$strQuery = "SELECT
					prod.id_produto, prod.titulo_prod, prod.img_prod, prod.desc_prod,
					cat.id_cat, cat.desc_categoria, sub.id_subcat, sub.desc_subcat,
					mar.id_marca, mar.titulo_marca, mar.desc_marca, mar.img_marca ";
		
		$strQuery .= " FROM
					 		".$this->_table." prod
					 		LEFT JOIN prod_cat cat
					 		ON prod.id_categoria = cat.id_cat
					 		LEFT JOIN prod_subcat sub
					 		ON prod.id_subcat = sub.id_subcat
					 		LEFT JOIN prod_marca mar
					 		ON prod.id_marca = mar.id_marca
			 		WHERE 
			 				prod.status_prod = 'S' 
			 				AND prod.id_produto = '".$id."'";
		
		$arrRet = ControlDB::getRow($strQuery,3);
		return $arrRet;
	}

	public function getProdutosCategoria($id=null){
		$strQuery = "SELECT
							id_produto, titulo_prod
					 FROM 
					 		".$this->_table ;
		if(isset($id))
			$strQuery .= " WHERE
					 	id_categoria = '".$id."'";
		
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	
	public function getProdutosMarca($id=null){
		$strQuery = "SELECT
							id_produto, titulo_prod
					 FROM 
					 		".$this->_table ;
		if(isset($id))
			$strQuery .= " WHERE
					 	id_marca = '".$id."'";
		
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}

	/**
	 * Listagem de produtos
	 *
	 * @param int $idCategoria
	 * @param int $idSubCategoria
	 */
	public function getListaProdutos($pagina = 0, $idCategoria = null, $idSubCategoria = null, $conta = false, $ordem = "novo", $idMarca = null){
		$limit = $this->numElemPagCat;
		$inicio = $pagina * $limit;
		if(!$conta){
		$strQuery = "SELECT
							id_produto, titulo_prod, 
							img_prod, id_subcat ";
		}else{
			$strQuery= "SELECT count(id_produto) ";
		}
		$strQuery .= " FROM 
					 		".$this->_table." 
					 WHERE
					 	1 = 1 AND status_prod = 'S' ";
		if(isset($idCategoria)){
			$strQuery .= " AND id_categoria = '".$idCategoria."' ";
		}
		if(isset($idSubCategoria)){
			$strQuery .= " AND id_subcat = '".$idSubCategoria."' ";
		}
		if(isset($idMarca)){
			$strQuery .= " AND id_marca = '".$idMarca."' ";
		}
		if(isset($ordem) && $ordem != ""){
			if($ordem == "novos"){
				$strQuery .= " ORDER BY id_produto DESC ";	
			}else if($ordem == "a_z"){
				$strQuery .= " ORDER BY titulo_prod ";	
			}
		}
		if(!$conta){
			$strQuery .= " LIMIT ".$inicio.", ".$limit;
		}
		
		$arrRet = ControlDB::getAll($strQuery,3);
		
		//print("<pre>");
		//print($strQuery);
		//die();
		
		return $arrRet;
	}
	
	/**
	 * Listagem de produtos por marca
	 *
	 * @param int $idCategoria
	 * @param int $idSubCategoria
	 */
	public function getListaProdutosMarca($pagina = 0, $idMarca = null, $idSubCategoria = null, $conta = false, $ordem = null){
		$limit = $this->numElemPagMarca;
		$inicio = $pagina * $limit;
		if(!$conta){
		$strQuery = "SELECT
							id_produto, titulo_prod, 
							img_prod, id_subcat ";
		}else{
			$strQuery= "SELECT count(id_produto) ";
		}
		$strQuery .= " FROM 
					 		".$this->_table." 
					 WHERE
					 	1 = 1 AND status_prod = 'S' ";
		if(isset($idMarca)){
			$strQuery .= " AND id_marca = '".$idMarca."' ";
		}
		if(isset($idSubCategoria)){
			$strQuery .= " AND id_subcat = '".$idSubCategoria."' ";
		}
		
		if(isset($ordem) && $ordem != ""){
			if($ordem == "novos"){
				$strQuery .= " ORDER BY id_produto DESC ";	
			}else if($ordem == "a_z"){
				$strQuery .= " ORDER BY titulo_prod ";	
			}
		}
		
		if(!$conta){
			$strQuery .= " LIMIT ".$inicio.", ".$limit;
		}
		$arrRet = ControlDB::getAll($strQuery,3);
		
		return $arrRet;
	}
	
	public function numPaginas($idCategoria = null, $idSubCategoria = null,$idMarca = null){
		$arrPags = self::getListaProdutos(0, $idCategoria, $idSubCategoria, true,  $ordem="", $idMarca);
		return ceil($arrPags[0][0] / $this->numElemPagCat);
	}
	
	public function numPaginasByMarca($idMarca= null, $idSubCategoria = null){
		$arrPags = self::getListaProdutosMarca(0, $idMarca, $idSubCategoria, true);
		return ceil($arrPags[0][0] / $this->numElemPagMarca);
	}

	public function getIdProduto(){
		return $this->id_produto;
	}

	public function alterar($id=null,$post,$file){
		try{
			self::salvaPostAutoUtf8($post);
			$this->id_produto = $id;
			if(!isset($post["id_subcat"]) || $post["id_subcat"] == "")
				$this->id_subcat = 0;
			/**
			 * UPLOAD DO ARQUIVO
			 */
			try{
				parent::uploadArquivoFwk("img_prod", $this->id_produto,$file, PASTA_UPLOADS_ARQUIVOS."produtos/");
			}catch(Exception $e){
				die("Erro no upload: -> ".$e->getMessage());
			}
			//campos default para todos os daos (historico de edição de arquivos)
			$this->data_alteracao = date("Y-m-d H:i:s");
			$this->id_usuario = parent::getUsuarioSessao()->getIdUsuario();
			self::replace();
			if(self::ErrorMsg()){
				print("<pre>");
				print_r($post);
				print_r($this);
				print_r($file);
				die("<br/><br /><h1>".self::ErrorMsg()."</h1>");
			}
		}catch(DaoException $e){
			throw new CustonException($e->getMensagem());
		}
	}
}
?>